bitkeeper revision 1.1159.272.1 (423ad23cVUXoD_eqhx9vK868Hg9Xlg)
authoriap10@tetris.cl.cam.ac.uk <iap10@tetris.cl.cam.ac.uk>
Fri, 18 Mar 2005 13:06:04 +0000 (13:06 +0000)
committeriap10@tetris.cl.cam.ac.uk <iap10@tetris.cl.cam.ac.uk>
Fri, 18 Mar 2005 13:06:04 +0000 (13:06 +0000)
manualmerge

1  2 
linux-2.6.11-xen-sparse/arch/xen/i386/kernel/setup.c

index 8551fad5a72dd92d26d3d596e98925d9848274d1,23570f6765a34e19d0fddbc8bfe91f5483f2f76b..5b6b9a69a010a44f5981488176cf7ab6c7be08a2
@@@ -1491,26 -1491,16 +1491,28 @@@ void __init setup_arch(char **cmdline_p
  #endif
        paging_init();
  
 -      /* Make sure we have a large enough P->M table. */
 -      if (max_pfn > xen_start_info.nr_pages) {
 +      /* Make sure we have a correctly sized P->M table. */
 +      if (max_pfn != xen_start_info.nr_pages) {
                phys_to_machine_mapping = alloc_bootmem_low_pages(
                        max_pfn * sizeof(unsigned long));
 -              /* set to IVALID_P2M_ENTRY */
 -              memset(phys_to_machine_mapping, ~0,
 -                      max_pfn * sizeof(unsigned long));
 -              memcpy(phys_to_machine_mapping,
 -                      (unsigned long *)xen_start_info.mfn_list,
 -                      xen_start_info.nr_pages * sizeof(unsigned long));
++
 +              if (max_pfn > xen_start_info.nr_pages) {
++                      /* set to INVALID_P2M_ENTRY */                        
 +                      memset(phys_to_machine_mapping, ~0,
 +                              max_pfn * sizeof(unsigned long));
 +                      memcpy(phys_to_machine_mapping,
 +                              (unsigned long *)xen_start_info.mfn_list,
 +                              xen_start_info.nr_pages * sizeof(unsigned long));
 +              } else {
 +                      memcpy(phys_to_machine_mapping,
 +                              (unsigned long *)xen_start_info.mfn_list,
 +                              max_pfn * sizeof(unsigned long));
 +                      if (HYPERVISOR_dom_mem_op(
 +                              MEMOP_decrease_reservation,
 +                              (unsigned long *)xen_start_info.mfn_list + max_pfn,
 +                              xen_start_info.nr_pages - max_pfn, 0) !=
 +                          (xen_start_info.nr_pages - max_pfn)) BUG();
 +              }
                free_bootmem(
                        __pa(xen_start_info.mfn_list), 
                        PFN_PHYS(PFN_UP(xen_start_info.nr_pages *